package main

import "fmt"

// Action 接口 Action
type Action interface {
	SayHi()
}

// 结构 student
type student struct {
	name string
}

// PrintName
// 为结构 student 增加方法 PrintName()
func (stu student) PrintName() {
	fmt.Println(stu.name)
}

// SayHi
// 使结构 student 实现接口 Action 中的 SayHi() 方法
func (student) SayHi() {
	fmt.Println("say Hi")
}

func main() {

	t := student{name: "Michal"}
	// 调用结构自己的方法
	t.PrintName() // => Michal

	// student 作为接口 Action 的实现类赋值给 action 时会"窄化"，"窄化" 后的 action 只能调用 Action 接口中定义的方法
	var action Action = student{}
	// 调用结构实现的接口方法
	action.SayHi()

}
